package ztrust

import "time"

type ZtrustScoreDTO struct {
	CybertwinID  uint    `json:"cybertwin_id"`
	BasicScore   float64 `json:"basic_score"`
	DynamicScore float64 `json:"dynamic_score"`
}

type ZtrustEventDTO struct {
	ID          int       `json:"id"`
	CybertwinID uint      `json:"cybertwin_id"`
	Event       string    `json:"event"`
	ScoreDesc   string    `json:"score_desc"`
	EventDesc   string    `json:"event_desc"`
	TriggerAt   time.Time `json:"trigger_at"`
}

type ZtrustAccessEventDTO struct {
	// CybertwinID 表示虚拟身份或用户的唯一标识符 (等同于用户 ID)
	// 类型: 整数
	// 示例: 1001
	CybertwinID int    `json:"cybertwin_id"`
	Scene       string `json:"scene"`

	// 用户身份可信度评估总体得分，范围通常为 0.0 - 1.0 或 0 - 100（由上层约定）
	// 用于表示基于身份相关数据（设备、登录时间、位置信息、生物识别等）计算出的可信度
	IdentityScore float64 `json:"identity_score"`

	// IdentityData 包含一次登录事件中用于身份评估的原始数据
	// LoginTerminal: 终端指纹（例如设备指纹 SHA-256），用于识别常用设备
	// LoginTime: 登录时间，ISO8601 / RFC3339 格式推荐（例如 "2025-09-02T15:04:05Z"），也可为 unix 秒字符串
	// LoginLocation: 登录地址，格式为 "省份-城市"（例如 "北京市-北京市"）
	// BiometricInfo: 终端上采集到的生物识别结果，0=未通过、1=未检查、2=通过
	IdentityData struct {
		LoginTerminal string `json:"login_terminal"`
		// LoginTime is ISO8601 / RFC3339 string or unix seconds string
		LoginTime string `json:"login_time"`
		// LoginLocation 格式: "省份-城市"
		LoginLocation string `json:"login_location"`
		BiometricInfo struct {
			// FaceRecognition: 人脸识别结果，0=未通过，1=未检查，2=通过
			FaceRecognition int `json:"face_recognition"`
			// Fingerprint: 指纹识别结果，0=未通过，1=未检查，2=通过
			Fingerprint int `json:"fingerprint"`
			// IrisRecognition: 虹膜识别结果，0=未通过，1=未检查，2=通过
			IrisRecognition int `json:"iris_recognition"`
		} `json:"biometric_info"`
	} `json:"identity_data"`

	// IdentityTrust 存放用于长期、可信档案的统计/汇总信息，用于与本次登录事件比对
	// OnlineTime: 过去一段时间（例如 100 天 * 24 小时）的在线习惯分布，此处为根据计算出来的 24 小时概率表
	// OnlineLocation: 过去多次登录的地理位置频率/权重映射，key 为 "省份-城市"，value 为频率或置信度
	IdentityTrust struct {
		OnlineTerminal []string           `json:"online_terminal"`
		OnlineTime     []float64          `json:"online_time"`
		OnlineLocation map[string]float64 `json:"online_location"`
	} `json:"identity_trust"`

	// 网络环境可信度评估总体得分，表示设备/网络层面的安全性评分
	NetworkScore float64 `json:"network_score"`

	// NetworkData 包含本次登录采集到的网络/设备安全相关原始数据
	// TPM: 是否启用了受信任平台模块（Trusted Platform Module）
	// CleanBoot: 是否启用了安全启动或干净启动（secure/clean boot）
	// SoftwareVersion: 设备/客户端软件版本（语义化版本号）
	// ProtocolSecurity: 通信协议安全特性汇总
	// AccessNetSecurity: 接入网络（如 Wi‑Fi）相关安全配置
	NetworkData struct {
		TPM bool `json:"tpm"`
		// CleanBoot 表示设备是否启用安全启动或类似机制
		CleanBoot bool `json:"clean_boot"`
		// SoftwareVersion 采用语义化版本字符串，例如 "1.2.3"
		SoftwareVersion  string `json:"software_version"`
		ProtocolSecurity struct {
			// VersionLatest: 协议/实现是否为最新版本（true 表示最新）
			VersionLatest bool `json:"version_latest"`
			// EncryptionBuiltIn: 协议是否内置加密机制（true 表示启用加密）
			EncryptionBuiltIn bool `json:"encryption_built_in"`
			// AntiReplayAttack: 是否提供抗重放攻击机制
			AntiReplayAttack bool `json:"anti_replay_attack"`
			// DataIntegrityCheck: 是否提供数据完整性校验
			DataIntegrityCheck bool `json:"data_integrity_check"`
			// CertificateVerification: 是否进行证书验证
			CertificateVerification bool `json:"certificate_verification"`
		} `json:"protocol_security"`
		AccessNetSecurity struct {
			// UseWifi 表示本次接入是否使用 Wi‑Fi（true）还是蜂窝/其他（false）
			UseWifi      bool `json:"use_wifi"`
			WifiSecurity struct {
				// SsidHidden: SSID 是否隐藏（true 表示隐藏）
				SsidHidden bool `json:"ssid_hidden"`
				// MacFiltering: 是否启用了 MAC 地址过滤
				MacFiltering bool `json:"mac_filtering"`
				// GuestNetwork: 是否启用了访客网络
				GuestNetwork bool `json:"guest_network"`
				// PasswordLength: 密码长度类别，0=无密码,1=<8,2>=8（按数据生成文档说明）
				PasswordLength int `json:"password_length"`
				// PasswordComplexity: 密码复杂度评分（按小写/大写/特殊字符累加得分）
				PasswordComplexity int `json:"password_complexity"`
				// Dot1xAuth: 是否启用 802.1x 认证
				Dot1xAuth bool `json:"dot1x_auth"`
			} `json:"wifi_security"`
			// FirmwareLatest: 接入设备固件是否为最新
			FirmwareLatest bool `json:"firmware_latest"`
			// FirewallEnabled: 是否启用了防火墙
			FirewallEnabled bool `json:"firewall_enabled"`
			// RemoteMgmtDisabled: 是否禁用了远程管理（true 表示已禁用，更安全）
			RemoteMgmtDisabled bool `json:"remote_mgmt_disabled"`
		} `json:"access_net_security"`
	} `json:"network_data"`

	// NetworkTrust 存放可信/长期的网络相关信息（例如最新的受信任软件版本）
	// LatestSoftwareVersion: 可信来源记录的当前最新软件版本，用于与 NetworkData.SoftwareVersion 比较
	NetworkTrust struct {
		LatestSoftwareVersion string `json:"latest_software_version"`
	} `json:"network_trust"`

	// 物理环境可信度评估总体得分
	PhysicalScore float64 `json:"physical_score"`

	// PhysicalData 描述登录时的物理位置/场所信息，用于计算场所安全等级
	// Location: 字符串表示的场所（例如 "家", "机场", "火车站" 等），按文档中地点列表映射到安全等级
	PhysicalData struct {
		Location string `json:"location"`
	} `json:"physical_data"`

	// 随机软件抽查
	SoftwareImage     string `json:"software_image"`
	SoftwareSignature string `json:"software_signature"`
	// 包括广告软件、银行恶意软件、短信恶意软件、风险软件、良性软件五类，其中除了良性软件外其他四类均为恶意软件
	SoftwareClass string `json:"software_class"`

	// 综合得分：结合身份、网络、物理等维度计算出的最终可信度得分
	SynthesisScore float64 `json:"synthesis_score"`
	// IsPass: 最终是否通过认证（布尔）
	IsPass bool `json:"is_pass"`
	// RejectReason: 当 IsPass 为 false 时，记录拒绝原因（可选，空字符串表示无）
	RejectReason string `json:"reject_reason"`
}
